OpenGL - Les Normales

Je vous ai longuement parlé des lumières, et si vous avez testé par vous même, vous avez dû vous rendre compte de certaines choses bisards.

Par exemple si vous avez animé des sphères et des carrés avec de la lumière, certains objets devaient être eclairé et pas d'autres. Ne vous en faites pas c normal. blague -> Il s'agit en effet des "normales".

Explication: Chaque polygone renvoi la lumière à sa manière, dans un carrè par exemple la face de gauche envoi un maximum de lumière à gauche et la face du dessus en envoi vers le haut. Eh bien en fait la lumière a besoin de connaître la normale d'une face pour pouvoir réflechir la lumière correctement. Et si vos objets quadratics la renvois toujours correctement, c'est grâce à gluQuadricNormals(pObj, GLU_SMOOTH); qui calcul tous seul les normales.

POur tous les autres objets que vous crérez, soit vous mettez en scène quelques carrés qui se battent en duels, et vous pouvez utiliser glEnable(GL_NORMALIZE); qui va calculer les normales au detriment des performances.
Soit vous mettez en scène des objets complèxe, de type 3DSmax, lightWave, 3Dtruc ou 3DMachin et là vous devez vous même calculer vos normales et les appliquer.

Flat Shading

Le principe est de donner une ligne directrice a prendre pour les normales, Chaque sommet va envoyer à sa manière la lumière dans la direction que vous lui indiquez. Dans ce cas les dégrades n'éxiste pas, si vous faite une sphère manuellement vous verrez les arètes qui la constituent. Utilisez glNormal3f(float,float,float); ou glNormalfv(float *); pour donner une direction.

Gouraud Shading

Beaucoup plus fine, cette technique est basé sur le calcul des normales de chaque sommets, car un sommet est théoriquement considéré comme une face. Une fois les normales appliquées, opengl se chargera de remplir les faces avec les dégradés de lumière qu'il convient.

Calcul des Normales

Lorsque vous travaillerez avec des objets de type 3DSmax, vous vous apperçeverez que chaque objets complèxe est composé de plein de petits triangles, quelque soit l'outil. Ce n'est pas un hasard, c'est pour nous faciliter le calcul de ces normales. En effet, une normale s'obtient lorsque l'on calcul le produit vectoriel de deux arètes d'une face. Ce produit vectoriel n'est pas possible dans le cas où les arètes sont collinéaire. Donc si les faces étaient composé de carrés, il faudrait faire attention aux arète que l'on séléctionne, ce qui ralentirai le traitement.

 
Retour
contact: ultrafil [AT] fr.st